import datetime
import json
import types
from decimal import Decimal

from flask_restful.inputs import date
from psutil import long
from psutil._compat import basestring

from sqlalchemy.util import OrderedDict


class DictSerializable(object):
    def as_dict(self,*args):
        result = OrderedDict()
        keys=args or self.__mapper__.c.keys()
        for key in keys:
            if hasattr(self,key):
                obj=getattr(self, key)
                if isinstance(obj,basestring):
                    value=obj
                elif isinstance(obj,int) or isinstance(obj,long) or isinstance(obj,float):
                    value=obj
                elif isinstance(obj,Decimal):
                    value=str(obj)
                elif isinstance(obj,types.choice.Choice):
                    value=obj.code
                elif isinstance(obj,datetime):
                    value=obj.strftime('%Y-%m-%d %M:%H:%S')
                elif isinstance(obj,date):
                    value=obj.strftime('%Y-%m-%d')
                else:
                    raise Exception('不支持系列化[%s]类型!' % type(obj))
                result[key] = value

        return result

    def as_json(self,*args):
        d=self.as_dict(*args)
        print(json.dumps(d))
        return json.dumps(d)

